kmod: fix build failure in install step over dirty build dir
authorPetr Štetiar <[email protected]>
Wed, 6 Aug 2025 09:30:40 +0000 (09:30 +0000)
committerRobert Marko <[email protected]>
Wed, 6 Aug 2025 12:38:38 +0000 (14:38 +0200)
When building kmod-32 package for the first time (clean build_dir), it
builds and installs fine. When building for 2nd time, sometimes
(probably some race condition?) it fails to build in install step with
following error:

  for tool in insmod lsmod rmmod depmod modprobe modinfo; do \
   ln -s kmod /tmp/build_dir/target-aarch64_cortex-a73+neon-vfpv4_musl/kmod-32/ipkg-install/usr/bin/$tool; \
  done
  ln: failed to create symbolic link '/tmp/build_dir/target-aarch64_cortex-a73+neon-vfpv4_musl/kmod-32/ipkg-install/usr/bin/insmod': File exists
  ln: failed to create symbolic link '/tmp/build_dir/target-aarch64_cortex-a73+neon-vfpv4_musl/kmod-32/ipkg-install/usr/bin/lsmod': File exists
  ln: failed to create symbolic link '/tmp/build_dir/target-aarch64_cortex-a73+neon-vfpv4_musl/kmod-32/ipkg-install/usr/bin/rmmod': File exists
  ln: failed to create symbolic link '/tmp/build_dir/target-aarch64_cortex-a73+neon-vfpv4_musl/kmod-32/ipkg-install/usr/bin/depmod': File exists
  ln: failed to create symbolic link '/tmp/build_dir/target-aarch64_cortex-a73+neon-vfpv4_musl/kmod-32/ipkg-install/usr/bin/modprobe': File exists
  ln: failed to create symbolic link '/tmp/build_dir/target-aarch64_cortex-a73+neon-vfpv4_musl/kmod-32/ipkg-install/usr/bin/modinfo': File exists

Lets fix it by backporting upstream fix.

Fixes: #27171
Link: https://lore.kernel.org/r/[email protected]
Upstream-Status: Backport [https://github.com/kmod-project/kmod/commit/c5054b215089f9e3cdc9602232649c2b5b1de743]
Signed-off-by: Petr Štetiar <[email protected]>
utils/kmod/patches/020-build-allow-to-install-over-dirty-dir.patch [new file with mode: 0644]

diff --git a/utils/kmod/patches/020-build-allow-to-install-over-dirty-dir.patch b/utils/kmod/patches/020-build-allow-to-install-over-dirty-dir.patch
new file mode 100644 (file)
index 0000000..afaadc2
--- /dev/null
@@ -0,0 +1,45 @@
+From c5054b215089f9e3cdc9602232649c2b5b1de743 Mon Sep 17 00:00:00 2001
+From: Lucas De Marchi <[email protected]>
+Date: Wed, 6 Mar 2024 08:58:04 -0600
+Subject: [PATCH] build: Allow to install over dirty dir
+
+Before commit e98cef6f3f8c ("make: install/uninstall tools symlinks to
+kmod") it was possible to call `make install DESTDIR=<dir>` multiple
+times. Use `ln -sf` so the symlink is always re-created.
+
+It would be preferred to remove install in an empty dir, but there's
+not a bad consequence of re-using the same, so let the user decide.
+Fixes the following errors while installing for the second time:
+
+       ln: failed to create symbolic link '/tmp/inst/usr/bin/insmod': File exists
+       ln: failed to create symbolic link '/tmp/inst/usr/bin/lsmod': File exists
+       ln: failed to create symbolic link '/tmp/inst/usr/bin/rmmod': File exists
+       ln: failed to create symbolic link '/tmp/inst/usr/bin/depmod': File exists
+       ln: failed to create symbolic link '/tmp/inst/usr/bin/modprobe': File exists
+       ln: failed to create symbolic link '/tmp/inst/usr/bin/modinfo': File exists
+       make[3]: *** [Makefile:2679: install-exec-hook] Error 1
+       make[2]: *** [Makefile:2553: install-exec-am] Error 2
+       make[1]: *** [Makefile:2439: install-am] Error 2
+       make: *** [Makefile:1848: install-recursive] Error 1
+
+Cc: Emil Velikov <[email protected]>
+Closes: https://github.com/kmod-project/kmod/issues/35
+Reviewed-by: Emil Velikov <[email protected]>
+Link: https://lore.kernel.org/r/[email protected]
+Upstream-Status: Backport [https://github.com/kmod-project/kmod/commit/c5054b215089f9e3cdc9602232649c2b5b1de743]
+Signed-off-by: Lucas De Marchi <[email protected]>
+---
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -113,7 +113,7 @@ install-exec-hook:
+       fi
+ if BUILD_TOOLS
+       for tool in insmod lsmod rmmod depmod modprobe modinfo; do \
+-              $(LN_S) kmod $(DESTDIR)$(bindir)/$$tool; \
++              $(LN_S) -f kmod $(DESTDIR)$(bindir)/$$tool; \
+       done
+ endif